package com.cda.common;

import com.alibaba.fastjson.JSON;
import com.sun.jna.Library;
import com.sun.jna.Memory;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.ptr.ByteByReference;
import com.sun.jna.ptr.IntByReference;

import java.lang.reflect.Field;
import java.nio.ByteBuffer;


/**
 * Created by peiming on 2019/3/3.
 */
public class CommandPos {
    /**
     * DLL动态库调用方法2
     */
    public interface CLibrary extends Library {

        // DLL文件默认路径为项目根目录，若DLL文件存放在项目外，请使用绝对路径
       /* CLibrary INSTANCE1 = (CLibrary) Native.loadLibrary("cximage",CLibrary.class);*/
        CLibrary INSTANCE = (CLibrary) Native.loadLibrary("C:\\Users\\peiming\\Desktop\\test\\MisPos.dll",CLibrary.class);

        // 声明将要调用的DLL中的方法（可以是多个方法）
      // Integer BankTrans( byte[] InputData, byte[]  OutPutData) throws Exception;
       IntByReference BankTrans(String InputData, Pointer  OutPutData) throws Exception;
        // Integer BankTrans( StringBuffer InputData, StringBuffer  OutPutData) throws Exception;
       //Integer BankTrans(ByteByReference InputData, ByteByReference  OutPutData) throws Exception;
       //Integer BankTrans(String InputData, Pointer OutPutData);
       // Integer BankTrans(InputdataTest.ByReference InputData, InputdataTest.ByReference  OutPutData);
    }

    static{
       /* System.setProperty("java.library.path","D:\\sf\\trunk2\\sf-client\\lib\\test;" + System.getProperty("java.library.path"));
        System.out.printf("java.library.path: %s%n",System.getProperty("java.library.path"));
        Field fieldSysPath;
        try {
            fieldSysPath = ClassLoader.class.getDeclaredField("sys_paths");
            fieldSysPath.setAccessible(true);
            fieldSysPath.set(null, null);
        } catch (Exception e) {
            e.printStackTrace();
        }*/












































       // System.out.println(System.getProperty("java.library.path"));——+{
       /*System.load("D:\\sf\\trunk2\\sf-client\\lib\\test\\cximage.dll");
        System.load("D:\\sf\\trunk2\\sf-client\\lib\\test\\MisPos.dll");*/
    }
    public static void main(String[] arg) throws Exception{
        for(int i=0;i<=10;i++){
            Pointer p =new Memory(1024);
            long peer=Pointer.nativeValue(p);
            Native.free(peer);
            Pointer.nativeValue(p, 0);
            System.gc();
           // CommandPos1 commandPos1=new CommandPos1();
            //commandPos1.start();

        int abc=1;
           byte[] inputBytes= "D2015 A001 030000000000000000111900000000016700000000009800000000000272030 5000000000015 333333333333333333333333333333333333333333333333333333333333333 33333333333333333333333333333333333333333 W20150616205755001 ".getBytes();
          byte[] out="".getBytes();
            ByteBuffer directBuffer = ByteBuffer.allocateDirect(1024);
            String inputStr="D2015 A001 030000000000000000111900000000016700000000009800000000000272030 5000000000015 333333333333333333333333333333333333333333333333333333333333333 33333333333333333333333333333333333333333 W20150616205755001 ";
            String outStr="";
            StringBuffer bffInput=new StringBuffer(inputStr);
            StringBuffer bffout=new StringBuffer("");
            ByteByReference byteByReference=new ByteByReference();
            Memory mymem = new Memory(1024);
            byteByReference.setValue(new Byte("00") );
            byteByReference.setPointer(mymem);
            ByteByReference byteByReference1=new ByteByReference();
            byteByReference.setValue(new Byte("000000000001") );
            byteByReference1.setPointer(mymem);
         // abc= CLibrary.INSTANCE.BankTrans(inputBytes,out);
            Pointer result =new Memory(1024);
            CLibrary.INSTANCE.BankTrans(inputStr,result);
            //abc= CLibrary.INSTANCE.BankTrans(bffInput,bffout);
            InputdataTest.ByReference pmysStructur = new InputdataTest.ByReference();
            pmysStructur.amount="000000000001";
            pmysStructur.trans="00";

            InputData inputData=new InputData();
            inputData.setTrans("00");
            inputData.setAmount("000000000001");
            String input=JSON.toJSONString(inputData);
           // abc= CLibrary.INSTANCE.BankTrans(pmysStructur,pmysStructur);
            System.out.println("out:"+out);
            System.out.println("outStr:"+outStr);
            System.out.println("bffout:"+bffout);
            //System.out.println("byteByReference1:"+byteByReference1.());
           System.out.println("abc:" + abc);

                System.out.println(i);
           System.gc();
           //Pointer p1 =new Memory(1024);
            long peer1=Pointer.nativeValue(result);
            Native.free(peer1);
            Pointer.nativeValue(result, 0);
            //Thread.sleep(1000*60);

        }
    }
   /* class CommandPos1 extends Thread{
        CommandPos commandPos1=new CommandPos();
        @Override
        public  void run() {
            try {
                Thread.sleep(0);
                String out="";
                CLibrary.INSTANCE.BankTrans("D2015 A001 030000000000015012111900000000016700000000009800000000000272030 5000000000015 333333333333333333333333333333333333333333333333333333333333333 33333333333333333333333333333333333333333 W20150616205755001 "
                        , out);
            }catch (Exception e){
                e.printStackTrace();
            }

        }
    }
}*/

}